package com.colabo.j2ee.web.oaf.security;

import java.util.List;
import java.util.Map;

import com.colabo.j2ee.web.core.exception.ServiceException;

/**
 * 访问系统安全策略数据
 */
public interface ISecurityStrategyService {
	public static final String BEAN_ID = "securityStrategyService";

	/**
	 * 取得所有策略数据列表
	 * 
	 * @return List<IPArcSecurityStrategyVO>
	 */
	public List getAllStrategies() throws ServiceException;
	
	/**
	 * 根据是否扩展获得所有策略
	 * @return
	 * @throws ServiceException
	 */
	public List getAllStrategies(String extFlag) throws ServiceException;

	/**
	 * 根据策略名称得到策略值
	 * 
	 * @param strategyName
	 * @return 策略值
	 */
	public String getStrategyValue(String strategyName);

	/**
	 * 得到默认最大登录失败次数策略值
	 * 
	 * @return 最大登录失败次数
	 */
	public Integer getMaxFailedLoginCount(String id);

	/**
	 * 得到超级管理员角色编码
	 * 
	 * @return 超级管理员角色编码
	 */
	public String getAdminRoleCode();

	/**
	 * 批量提交策略数据
	 * 
	 * @param insertBeans
	 * @param updateBeans
	 * @param delBeans
	 * @throws ServiceException
	 */
	public void batchCommit(List insertBeans, List updateBeans, List delBeans) throws ServiceException;

	/**
	 * 得到超级管理员员工号
	 * 
	 * @return 超级管理员员工号
	 */
	public String getAdminStaffId();

	/**
	 * 得到默认密码过期天数
	 * 
	 * @return 默认密码过期天数
	 */
	public Integer getPasswordExpireDays(String id);
	
	/**
	 * 得到默认密码修改次数
	 * 
	 * @return 默认密码修改次数重复
	 */
	public Integer getPasswordModifiedTimes(String id);
	
	/**
	 * 取得所有历史密码修改记录
	 * 
	 * @return List<IPArcSecurityStrategyVO>
	 */
	public List getAllPwdHistory(Map map) throws ServiceException;
	
	/**
	 * 取得默认密码
	 * @return
	 */
	public String getDefaultPasswd(String id);
	
	/**
	 * 取得密码最小长度限制
	 * @return
	 */
	public Integer getPasswdMinLen(String id);
	
	/**
	 * 首次登录是否修改密码
	 * @return
	 */
	public boolean isFirstModifyPwd(String id);
	
	/**
	 * 密码是否以最高级别保存
	 * @return
	 */
	public boolean isPasswordNeedZuhe(String id);
		
	/**
	 * 根据某个组中某个策略的值（个性）
	 * @param staffId       
	 * @param strategyName
	 * @param ignoreCase
	 * @return 策略值
	 */
	public String getGroupStrategyValue(String staffId,String strategyName); 
	
	/**
	 * 获得用户允许的session数目
	 * @param id
	 * @return
	 */
	public Integer getUserSession(String id);
	
	/**
	 * 获得系统允许的session数目
	 * @return
	 */
	public Integer getSysSession();
	
	/**
	 * 根据用户编号找到用户对应的安全策略值情况
	 * @param staffId 用户编号
	 * @return
	 * @throws ServiceException
	 */
	public List getSelfStrategies(String staffId) throws ServiceException;
	
	/**
	 * 根据用户对应组查找密码设置方式策略的值（个性）
	 * @param id  用户      
	 * @param ignoreCase
	 * @return 策略值
	 */
	public String getPwdSetting(String id); 
	
	/**
	 * 根据用户对应组查找自动解锁用户时间(小时)
	 * @param id
	 * @return
	 */
	public Integer getAutoEnableTime(String id);
}
